package meta

import (
	mydb "filestore-server/db"
)

//filemeta:文件元信息结构
type FileMeta struct{
	FileSha1 string
	FileName string
	FileSize int64
	Location string
	UploadAt string
}

var fileMetas map[string]FileMeta

func init(){
	fileMetas = make(map[string]FileMeta)
}

//UpdateFileMeta：新增/更新文件元信息
func UpdateFileMeta(fmeta FileMeta){
	fileMetas[fmeta.FileSha1]=fmeta

}
//UpdateFileMetaDB:新增/更新文件元信息到mysql中
func UpdateFileMetaDB(fmeta FileMeta)bool{
	return mydb.OnFileUploadFinished(fmeta.FileSha1,fmeta.FileName,fmeta.FileSize,fmeta.Location)
}

//GetFileMeta:通过sha1值获取文件的元信息对象
func GetFileMeta(fileSha1 string)(FileMeta,bool){

	   value,ok := fileMetas[fileSha1]
	   return value,ok
}
//RemoveFileMeta:删除
func RemoveFileMeta(filesha1 string){
	delete(fileMetas,filesha1)//多线程的话可能线程不安全的问题
}

//GetFileMetaDB:从mysql获取文件元信息
func GetFileMetaDB(fileSha1 string)(FileMeta,error){
	tfile,err := mydb.GetFileMeta(fileSha1)
	if err != nil{
		return FileMeta{},err
	}
	fmeta := FileMeta{
		FileSha1: tfile.FileHash,
		FileName: tfile.FileName.String,
		FileSize: tfile.FileSize.Int64,
		Location: tfile.FileAddr.String,
	}
	return fmeta,nil
}